package com.thiswhyme.common.utils.codec;

import com.thiswhyme.common.expection.BusinessException;
import lombok.extern.slf4j.Slf4j;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @description: SHA工具
 * @date: 2021/9/13
 */
@Slf4j
public class ShaUtils {

    /**
     * 使用SHA算法加密并转换为16进制字符串
     * @param src 待加密的字符串
     * @return 加密后的字符串
     */
    public static String string2ShaString(String src) {
        MessageDigest md;
        try {
            md = MessageDigest.getInstance(EncryptAlgorithm.SHA.name());
            md.update(src.getBytes(StandardCharsets.UTF_8));
        } catch (NoSuchAlgorithmException e) {
            log.error("不支持SHA加密算法", e);
            throw new BusinessException("不支持SHA加密算法");
        }
        return CodecUtils.byte2HexString(md.digest());
    }

    /**
     * 使用SHA-1算法加密并转换为16进制字符串
     * @param src 待加密的字符串
     * @return 加密后的字符串
     */
    public static String string2Sha1String(String src) {
        MessageDigest md;
        try {
            md = MessageDigest.getInstance(EncryptAlgorithm.SHA.name()+ "-1");
            md.update(src.getBytes(StandardCharsets.UTF_8));
        } catch (NoSuchAlgorithmException e) {
            log.error("不支持SHA-1加密算法", e);
            throw new BusinessException("不支持SHA-1加密算法");
        }
        return CodecUtils.byte2HexString(md.digest());
    }
}
